function focal_pixels = extractFocalFromEXIF(imageFileName)

focal_pixels = [];

% Add iphone support
% Refer to http://phototour.cs.washington.edu/focal.html

% list extracted from Bundler by Noah Snavely
ccd_widths = {...
'Asahi Optical Co.,Ltd.  PENTAX Optio330RS', 7.176;
'Canon Canon DIGITAL IXUS 400', 7.176;
'Canon Canon DIGITAL IXUS 40', 5.76;
'Canon Canon DIGITAL IXUS 430', 7.176;
'Canon Canon DIGITAL IXUS 500', 7.176;
'Canon Canon DIGITAL IXUS 50', 5.76;
'Canon Canon DIGITAL IXUS 55', 5.76;
'Canon Canon DIGITAL IXUS 60', 5.76;
'Canon Canon DIGITAL IXUS 65', 5.76;
'Canon Canon DIGITAL IXUS 700', 7.176;
'Canon Canon DIGITAL IXUS 750', 7.176;
'Canon Canon DIGITAL IXUS 800 IS', 5.76;
'Canon Canon DIGITAL IXUS II', 5.27;
'Canon Canon EOS 10D', 22.7;
'Canon Canon EOS-1D Mark II', 28.7;
'Canon Canon EOS-1Ds Mark II', 35.95;
'Canon Canon EOS  20D', 22.5;
'Canon Canon EOS 20D', 22.5;
'Canon Canon EOS 300D DIGITAL', 22.66;
'Canon Canon EOS 30D', 22.5;
'Canon Canon EOS 350D DIGITAL', 22.2;
'Canon Canon EOS 400D DIGITAL', 22.2;
'Canon Canon EOS 40D', 22.2;
'Canon Canon EOS 5D', 35.8;
'Canon Canon EOS DIGITAL REBEL', 22.66;
'Canon Canon EOS DIGITAL REBEL XT', 22.2;
'Canon Canon EOS DIGITAL REBEL XTi', 22.2;
'Canon Canon EOS Kiss Digital', 22.66;
'Canon Canon IXY DIGITAL 600', 7.176;
'Canon Canon PowerShot A10', 5.27;
'Canon Canon PowerShot A20', 7.176;
'Canon Canon PowerShot A400', 4.54;
'Canon Canon PowerShot A40', 5.27;
'Canon Canon PowerShot A510', 5.76;
'Canon Canon PowerShot A520', 5.76;
'Canon Canon PowerShot A530', 5.76;
'Canon Canon PowerShot A60', 5.27;
'Canon Canon PowerShot A620', 7.176;
'Canon Canon PowerShot A630', 7.176;
'Canon Canon PowerShot A640', 7.176;
'Canon Canon PowerShot A700', 5.76;
'Canon Canon PowerShot A70', 5.27;
'Canon Canon PowerShot A710 IS', 5.76;
'Canon Canon PowerShot A75', 5.27;
'Canon Canon PowerShot A80', 7.176;
'Canon Canon PowerShot A85', 5.27;
'Canon Canon PowerShot A95', 7.176;
'Canon Canon PowerShot G1', 7.176;
'Canon Canon PowerShot G2', 7.176;
'Canon Canon PowerShot G3', 7.176;
'Canon Canon PowerShot G5', 7.176;
'Canon Canon PowerShot G6', 7.176;
'Canon Canon PowerShot G7', 7.176;
'Canon Canon PowerShot G9', 7.600;
'Canon Canon PowerShot Pro1', 8.8;
'Canon Canon PowerShot S110', 5.27;
'Canon Canon PowerShot S1 IS', 5.27;
'Canon Canon PowerShot S200', 5.27;
'Canon Canon PowerShot S2 IS', 5.76;
'Canon Canon PowerShot S30', 7.176;
'Canon Canon PowerShot S3 IS', 5.76;
'Canon Canon PowerShot S400', 7.176;
'Canon Canon PowerShot S40', 7.176;
'Canon Canon PowerShot S410', 7.176;
'Canon Canon PowerShot S45', 7.176;
'Canon Canon PowerShot S500', 7.176;
'Canon Canon PowerShot S50', 7.176;
'Canon Canon PowerShot S60', 7.176;
'Canon Canon PowerShot S70', 7.176;
'Canon Canon PowerShot S80', 7.176;
'Canon Canon PowerShot SD1000', 5.75;
'Canon Canon PowerShot SD100', 5.27;
'Canon Canon PowerShot SD10', 5.75;
'Canon Canon PowerShot SD110', 5.27;
'Canon Canon PowerShot SD200', 5.76;
'Canon Canon PowerShot SD300', 5.76;
'Canon Canon PowerShot SD400', 5.76;
'Canon Canon PowerShot SD450', 5.76;
'Canon Canon PowerShot SD500', 7.176;
'Canon Canon PowerShot SD550', 7.176;
'Canon Canon PowerShot SD600', 5.76;
'Canon Canon PowerShot SD630', 5.76;
'Canon Canon PowerShot SD700 IS', 5.76;
'Canon Canon PowerShot SD750', 5.75;
'Canon Canon PowerShot SD800 IS', 5.76;
'Canon EOS 300D DIGITAL', 22.66;
'Canon EOS DIGITAL REBEL', 22.66;
'Canon PowerShot A510', 5.76;
'Canon PowerShot S30', 7.176;
'CASIO COMPUTER CO.,LTD. EX-S500', 5.76;
'CASIO COMPUTER CO.,LTD. EX-Z1000', 7.716;
'CASIO COMPUTER CO.,LTD  EX-Z30', 5.76;
'CASIO COMPUTER CO.,LTD. EX-Z600', 5.76;
'CASIO COMPUTER CO.,LTD. EX-Z60', 7.176;
'CASIO COMPUTER CO.,LTD  EX-Z750', 7.176;
'CASIO COMPUTER CO.,LTD. EX-Z850', 7.176;
'EASTMAN KODAK COMPANY KODAK CX7330 ZOOM DIGITAL CAMERA', 5.27;
'EASTMAN KODAK COMPANY KODAK CX7530 ZOOM DIGITAL CAMERA', 5.76;
'EASTMAN KODAK COMPANY KODAK DX3900 ZOOM DIGITAL CAMERA', 7.176;
'EASTMAN KODAK COMPANY KODAK DX4900 ZOOM DIGITAL CAMERA', 7.176;
'EASTMAN KODAK COMPANY KODAK DX6340 ZOOM DIGITAL CAMERA', 5.27;
'EASTMAN KODAK COMPANY KODAK DX6490 ZOOM DIGITAL CAMERA', 5.76;
'EASTMAN KODAK COMPANY KODAK DX7630 ZOOM DIGITAL CAMERA', 7.176;
'EASTMAN KODAK COMPANY KODAK Z650 ZOOM DIGITAL CAMERA', 5.76;
'EASTMAN KODAK COMPANY KODAK Z700 ZOOM DIGITAL CAMERA', 5.76;
'EASTMAN KODAK COMPANY KODAK Z740 ZOOM DIGITAL CAMERA', 5.76;
'EASTMAN KODAK COMPANY KODAK Z740 ZOOM DIGITAL CAMERA', 5.76;
'FUJIFILM FinePix2600Zoom', 5.27;
'FUJIFILM FinePix40i', 7.600;
'FUJIFILM FinePix A310', 5.27;
'FUJIFILM FinePix A330', 5.27;
'FUJIFILM FinePix A600', 7.600;
'FUJIFILM FinePix E500', 5.76;
'FUJIFILM FinePix E510', 5.76;
'FUJIFILM FinePix E550', 7.600;
'FUJIFILM FinePix E900', 7.78;
'FUJIFILM FinePix F10', 7.600;
'FUJIFILM FinePix F30', 7.600;
'FUJIFILM FinePix F450', 5.76;
'FUJIFILM FinePix F601 ZOOM', 7.600;
'FUJIFILM FinePix S3Pro', 23.0;
'FUJIFILM FinePix S5000', 5.27;
'FUJIFILM FinePix S5200', 5.76;
'FUJIFILM FinePix S5500', 5.27;
'FUJIFILM FinePix S6500fd', 7.600;
'FUJIFILM FinePix S7000', 7.600;
'FUJIFILM FinePix Z2', 5.76;
'Hewlett-Packard hp 635 Digital Camera', 4.54;
'Hewlett-Packard hp PhotoSmart 43x series', 5.27;
'Hewlett-Packard HP PhotoSmart 618 (V1.1)', 5.27;
'Hewlett-Packard HP PhotoSmart C945 (V01.61)', 7.176;
'Hewlett-Packard HP PhotoSmart R707 (V01.00)', 7.176;
'KONICA MILOLTA  DYNAX 5D', 23.5;
'Konica Minolta Camera, Inc. DiMAGE A2', 8.80;
'KONICA MINOLTA CAMERA, Inc. DiMAGE G400', 5.76;
'Konica Minolta Camera, Inc. DiMAGE Z2', 5.76;
'KONICA MINOLTA DiMAGE A200', 8.80;
'KONICA MINOLTA DiMAGE X1', 7.176;
'KONICA MINOLTA  DYNAX 5D', 23.5;
'Minolta Co., Ltd. DiMAGE F100', 7.176;
'Minolta Co., Ltd. DiMAGE Xi', 5.27;
'Minolta Co., Ltd. DiMAGE Xt', 5.27;
'Minolta Co., Ltd. DiMAGE Z1', 5.27;
'NIKON COOLPIX L3', 5.76;
'NIKON COOLPIX P2', 7.176;
'NIKON COOLPIX S4', 5.76;
'NIKON COOLPIX S7c', 5.76;
'NIKON CORPORATION NIKON D100', 23.7;
'NIKON CORPORATION NIKON D1', 23.7;
'NIKON CORPORATION NIKON D1H', 23.7;
'NIKON CORPORATION NIKON D200', 23.6;
'NIKON CORPORATION NIKON D2H', 23.3;
'NIKON CORPORATION NIKON D2X', 23.7;
'NIKON CORPORATION NIKON D40', 23.7;
'NIKON CORPORATION NIKON D50', 23.7;
'NIKON CORPORATION NIKON D60', 23.6;
'NIKON CORPORATION NIKON D70', 23.7;
'NIKON CORPORATION NIKON D70s', 23.7;
'NIKON CORPORATION NIKON D80', 23.6;
'NIKON E2500', 5.27;
'NIKON E2500', 5.27;
'NIKON E3100', 5.27;
'NIKON E3200', 5.27;
'NIKON E3700', 5.27;
'NIKON E4200', 7.176;
'NIKON E4300', 7.18;
'NIKON E4500', 7.176;
'NIKON E4600', 5.76;
'NIKON E5000', 8.80;
'NIKON E5200', 7.176;
'NIKON E5400', 7.176;
'NIKON E5600', 5.76;
'NIKON E5700', 8.80;
'NIKON E5900', 7.176;
'NIKON E7600', 7.176;
'NIKON E775', 5.27;
'NIKON E7900', 7.176;
'NIKON E7900', 7.176;
'NIKON E8800', 8.80;
'NIKON E990', 7.176;
'NIKON E995', 7.176;
'NIKON S1', 5.76;
'Nokia N80', 5.27;
'Nokia N80', 5.27;
'Nokia N93', 4.536;
'Nokia N95', 5.7;
'OLYMPUS CORPORATION     C-5000Z', 7.176;
'OLYMPUS CORPORATION C5060WZ', 7.176;
'OLYMPUS CORPORATION C750UZ', 5.27;
'OLYMPUS CORPORATION C765UZ', 5.76;
'OLYMPUS CORPORATION C8080WZ', 8.80;
'OLYMPUS CORPORATION X250,D560Z,C350Z', 5.76;
'OLYMPUS CORPORATION     X-3,C-60Z', 7.176;
'OLYMPUS CORPORATION X400,D580Z,C460Z', 5.27;
'OLYMPUS IMAGING CORP.   E-500', 17.3;
'OLYMPUS IMAGING CORP.   FE115,X715', 5.76;
'OLYMPUS IMAGING CORP. SP310', 7.176;
'OLYMPUS IMAGING CORP.   SP510UZ', 5.75;
'OLYMPUS IMAGING CORP.   SP550UZ', 5.76;
'OLYMPUS IMAGING CORP.   uD600,S600', 5.75;
'OLYMPUS_IMAGING_CORP.   X450,D535Z,C370Z', 5.27;
'OLYMPUS IMAGING CORP. X550,D545Z,C480Z', 5.76;
'OLYMPUS OPTICAL CO.,LTD C2040Z', 6.40;
'OLYMPUS OPTICAL CO.,LTD C211Z', 5.27;
'OLYMPUS OPTICAL CO.,LTD C2Z,D520Z,C220Z', 4.54;
'OLYMPUS OPTICAL CO.,LTD C3000Z', 7.176;
'OLYMPUS OPTICAL CO.,LTD C300Z,D550Z', 5.4;
'OLYMPUS OPTICAL CO.,LTD C4100Z,C4000Z', 7.176;
'OLYMPUS OPTICAL CO.,LTD C750UZ', 5.27;
'OLYMPUS OPTICAL CO.,LTD X-2,C-50Z', 7.176;
'OLYMPUS SP550UZ', 5.76;
'OLYMPUS X100,D540Z,C310Z', 5.27;
'Panasonic DMC-FX01', 5.76;
'Panasonic DMC-FX07', 5.75;
'Panasonic DMC-FX9', 5.76;
'Panasonic DMC-FZ20', 5.760;
'Panasonic DMC-FZ2', 4.54;
'Panasonic DMC-FZ30', 7.176;
'Panasonic DMC-FZ50', 7.176;
'Panasonic DMC-FZ5', 5.760;
'Panasonic DMC-FZ7', 5.76;
'Panasonic DMC-LC1', 8.80;
'Panasonic DMC-LC33', 5.760;
'Panasonic DMC-LX1', 8.50;
'Panasonic DMC-LZ2', 5.76;
'Panasonic DMC-TZ1', 5.75;
'Panasonic DMC-TZ3', 5.68;
'PENTAX Corporation  PENTAX *ist DL', 23.5;
'PENTAX Corporation  PENTAX *ist DS2', 23.5;
'PENTAX Corporation  PENTAX *ist DS', 23.5;
'PENTAX Corporation  PENTAX K100D', 23.5;
'PENTAX Corporation PENTAX Optio 450', 7.176;
'PENTAX Corporation PENTAX Optio 550', 7.176;
'PENTAX Corporation PENTAX Optio E10', 5.76;
'PENTAX Corporation PENTAX Optio S40', 5.76;
'PENTAX Corporation  PENTAX Optio S4', 5.76;
'PENTAX Corporation PENTAX Optio S50', 5.76;
'PENTAX Corporation  PENTAX Optio S5i', 5.76;
'PENTAX Corporation  PENTAX Optio S5z', 5.76;
'PENTAX Corporation  PENTAX Optio SV', 5.76;
'PENTAX Corporation PENTAX Optio WP', 5.75;
'RICOH CaplioG3 modelM', 5.27;
'RICOH       Caplio GX', 7.176;
'RICOH       Caplio R30', 5.75;
'Samsung  Digimax 301', 5.27;
'Samsung Techwin <Digimax i5, Samsung #1>', 5.76;
'SAMSUNG TECHWIN Pro 815', 8.80;
'SONY DSC-F828', 8.80;
'SONY DSC-N12', 7.176;
'SONY DSC-P100', 7.176;
'SONY DSC-P10', 7.176;
'SONY DSC-P12', 7.176;
'SONY DSC-P150', 7.176;
'SONY DSC-P200', 7.176;
'SONY DSC-P52', 5.27;
'SONY DSC-P72', 5.27;
'SONY DSC-P73', 5.27;
'SONY DSC-P8', 5.27;
'SONY DSC-R1', 21.5;
'SONY DSC-S40', 5.27;
'SONY DSC-S600', 5.760;
'SONY DSC-T9', 7.18;
'SONY DSC-V1', 7.176;
'SONY DSC-W1', 7.176;
'SONY DSC-W30', 5.760;
'SONY DSC-W50', 5.75;
'SONY DSC-W5', 7.176;
'SONY DSC-W7', 7.176;
'SONY DSC-W80', 5.75};

exif = imfinfo(imageFileName);

img = imread(imageFileName);

res_x = max(size(img,1),size(img,2));

if isfield(exif,'DigitalCamera') && isfield(exif.DigitalCamera,'FocalLengthIn35mmFilm')
    % this will take care of iphone
    
    ccd_width_mm = 36;
    
    focal_mm = exif.DigitalCamera.FocalLengthIn35mmFilm;
    
    focal_pixels = res_x * (focal_mm / ccd_width_mm);

elseif isfield(exif,'DigitalCamera') && isfield(exif.DigitalCamera,'FocalLength')

    str = sprintf('%s %s',exif.Make,exif.Model);

    % Trim leading, trailing spaces
    str = str;

    ccd_width_mm = ccd_widths{find(ismember(ccd_widths(:,1),str)),2};

    focal_mm = exif.DigitalCamera.FocalLength;
    
    focal_pixels = res_x * (focal_mm / ccd_width_mm);

end


